package com.yujiahao.bigdata.rdd.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * TODO RDD  groupBy --	小功能：从服务器日志数据apache.log中获取每个时间段访问量。也就是WordCOunt
 */

object Spark_RDD_Pper_Transform_GroupBy_WordCount {
  def main(args: Array[String]): Unit = {


    //TODO 1、获得连接
    val conf: SparkConf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc: SparkContext = new SparkContext(conf)
    // todo 3、业务逻辑
    //3.1.获取目标文件
    val rdd: RDD[String] = sc.textFile("data/apache.log")

    //3.2 按行读取并将其用空格分开，然后拿到时间戳
    val timeToOne: RDD[(String, Int)] = rdd.map(
      line => {
        val dates: Array[String] = line.split(" ")
        //3.3 拿到时间戳之后将时间戳继续切割，拿到第二个关键的时间段作为key值输出，values = 1
        (dates(3).split(":")(1), 1)
      }
    )
    //TODO  4、这里将获取到的数据按照时间段进行分组
    val group: RDD[(String, Iterable[(String, Int)])] = timeToOne.groupBy(_._1)
    //TODO 5、将分组后的数据，只处理value值，因为都是1，所以就直接拿到list集合的长度就是总数
    val result: RDD[(String, Int)] = group.mapValues(_.size)
    //6、遍历输出
    result.collect().foreach(println)
    //TODO 2、关闭连接
    sc.stop()
  }
}